home *** CD-ROM | disk | FTP | other *** search
- 1 ; *** intelligente floppy ****
- 2 ; ****************************
- 3 ; * written by stefan rother *
- 4 ; * frauenzellstrasse 26 *
- 5 ; * 8400 regensburg *
- 6 ; ****************************
- 7 ; * (c) 1986 markt&technik *
- 8 ; * verlag ag *
- 9 ; ****************************
- 10 .ba$ce18 ;start bei 52760
- 20 jsr$aefd;auf komma pruefen
- 30 jsr$b79e;8 bit-zahl nach x holen
- 60 stxz1;und zwischenspeichern
- 65 lda#07;maske zum ausfiltern
- 70 andz1;von bit 0-2 erstellen
- 74 ;
- 75 ;sprungtabelle
- 76 ;
- 80 bney1;bei 0
- 85 jmpload1;prg mit ',8' laden
- 90 y1 cmp#01;mit 1 vergleichen
- 100 bney2;wenn 1 ,dann
- 105 jmpload2;prg mit ',8,1' laden
- 110 y2 cmp#02;mit 2 vergleichen
- 120 bney3;wenn 2 ,dann
- 125 jmpsave;zur saveroutine springen
- 130 y3 cmp#03;mit 3 vergleichen
- 140 bney4;wenn 3 ,dann
- 145 jmpgoto;'goto'-routine aufrufen
- 150 y4 cmp#04;und dasselbe mit 4
- 160 bney5;wenn 4,dann
- 165 jmpjump;'jmp'-assemblerbefehl
- 170 y5 rts;wenn kein modus,dann zurueck
- 180 ;
- 185 ;algorithmus zum auswerten
- 186 ;eines diskettenwechsels
- 188 ;
- 190 floppy lda#08;parameter fuer
- 200 ldx#08;'open 8,8,15'
- 210 ldy#15;setzen
- 220 jsr$ffba;file vorbereiten
- 230 lda#00;kein filename
- 240 jsr$ffbd;filenamen vorbereiten
- 250 jsr$ffc0;'open'
- 260 jmpa;zur datenauswertung
- 270 x ldx#08;fuer kanal 8
- 280 jsr$ffc9;cmd out aktivieren
- 290 ldx#00;zaehler auf null
- 300 b1 ldat1,x;und von floppy
- 310 jsr$ffd2;per befehlssequenz
- 320 inx;von 6 zeichen
- 330 cpx#06;inhalt von $1c00
- 340 bneb1;abfragen
- 350 jsr$ffcc;cmd off
- 360 y ldx#08
- 370 jsr$ffc6;cmd in aktivieren
- 380 jsr$ffcf;besagtes byte holen
- 385 pha;und zwischenspeichern
- 390 jsr$ffcc;cmd inaktivieren
- 395 pla;byte zurueckholen
- 400 rts;ende des unterprg's 'daten holen'
- 410 ;
- 411 ;fortfuehrung des hauptprogramms
- 412 ;
- 415 a jsrbit05;bit 5=1 (dikettenwechsel) ?
- 417 jsrled;ja,dann je nach bit 6 led an
- 420 jsrx;hole aktuelles infobyte
- 430 andz2;und filtere lichschrankenbit
- 440 bnea;heraus-bei 1 warten
- 450 ;
- 460 b jsrx
- 470 andz2
- 480 beqb;warte bis bit=1,ls-unterbrechung
- 485 ;
- 490 c jsrled;einsprung,wenn vorher bit5=0
- 500 jsrx
- 510 andz2
- 520 bnec;warte,bis ls frei
- 530 ;
- 540 ldaz1;bit 7 des befehlbytes testen
- 550 bplf;bei 1 schreibschutz
- 560 ;
- 570 j ldx#$ff;warteschleife
- 580 e ldy#$ff;wegen schreibschutz
- 590 d dey
- 600 bned
- 610 dex
- 620 bnee
- 630 jmpg
- 640 ;
- 650 f jsrx;wenn kein schreibschutz,
- 660 andz2;dann auf kerbe
- 670 beqf;warten
- 680 ;
- 690 g ldx#$02;unbedingte warteschleife
- 700 k ldy#$a0
- 704 i decz5
- 706 bnei
- 710 h dey
- 720 bnei
- 730 dex
- 740 bnek
- 745 ;
- 750 ;routine ,die den motor der floppy einschaltet
- 755 ;und auf geschlossenes laufwerk prueft
- 756 ;
- 760 ldx#08;kanal 8
- 766 ;
- 770 jsr$ffc9;fuer cmd out
- 780 ldx#00
- 790 b2 ldat2,x
- 800 jsr$ffd2
- 810 inx
- 820 cpx#05;laenge des befehls
- 830 bneb2
- 840 jsr$ffcc;cmd inaktivieren
- 841 ldx#08;nochmals fuer neue anweisung
- 842 jsr$ffc9;aktivieren,um
- 843 ldx#00;der floppy eine kurze
- 844 b4 ldat4,x;initialisierungzeit
- 845 jsr$ffd2;zu gestatten
- 846 inx
- 847 cpx#06;diemal 6 befehlbytes
- 848 bneb4
- 849 jsr$ffcc;kanal 8 inaktivieren
- 850 jsry;laufwerk schon einsatzbereit ?
- 860 cmp#$ff
- 870 beqg;nein
- 880 ;
- 890 lda#08
- 900 jsr$ffc3;close 8
- 910 rts;ende der auswertung
- 1470 ;
- 1480 ;hier wird das hauptprogamm je nach
- 1490 ;befehlsbyte weitergefuehrt
- 1495 ;
- 1500 load1 lda#00;kennzeichen fuer
- 1510 stakk+1;'load ,8'
- 1520 jmpload;zur laderoutine
- 1540 load2 lda#01;oder fuer absolutes laden
- 1550 stakk+1;'load ,8,1'
- 1555 load jsr$aefd;prueft auf komma
- 1560 jsrfloppy;auf diskettenwechsel warten
- 1575 jsrget;filenamen holen
- 1576 jmpld;und laden
- 1580 get jsr$ad9a;vorauswerten und
- 1590 jsr$b6a3;auswerten des filenamens
- 1600 staz4;laenge,
- 1610 stxlo;lo-adresse und
- 1620 styhi;hi-adresse merken
- 1700 rts;zurueck
- 1710 ;---
- 1720 goto jsr$aefd;auf komma pruefen
- 1730 jsrfloppy;auf diskettenwechsel warten
- 1750 jsr$ad8a;sprungadresse fuer 'goto' holen
- 1760 jsr$b7f7;in 16 bit zahl wandeln
- 1770 jsr$a8a3;einsprung in die 'goto'-routine
- 1780 jmp$a7ae;und zur interpreterschleife
- 1790 ;
- 1800 jump jsr$aefd;auf komma pruefen
- 1810 jsrfloppy;auf diskettenwechsel warten
- 1830 jsr$ad8a;sprungadresse fur 'jmp' holen
- 1840 jsr$b7f7;in 16 bit zahl wandeln
- 1846 lda#$a7;startadresse des basic-
- 1847 pha
- 1848 lda#$ae;interpreters auf stack
- 1849 pha
- 1850 jmp($14);und zum maschinenprogramm
- 1860 ;
- 1861 save ldaz1;wenn save und schreib-
- 1863 bplon;schutz zusammen,dann
- 1865 jsr$b248;'illegal quantity error'
- 1870 on jsr$aefd;auf komma pruefen
- 1880 jsrfloppy;auf diskettenwechsel warten
- 1900 jsrget;filenamen holen
- 1910 ldx#08;geraeteadresse 8
- 1920 jsr$ffba;file vorbereiten
- 1930 ldxz4;laenge
- 1940 ldxlo;und adresse des file-
- 1950 ldyhi;namens holen
- 1960 jsr$ffbd;filenamen vorbereiten
- 1965 jsrget16;16 bit startadresse fuer save
- 1967 stx$fe;merken
- 1969 sty$ff
- 1971 jsrget16;16 bit endadresse fuer save
- 1973 lda#$fe;steht bei $fe/$ff
- 1975 jmpcont
- 1976 ;
- 1977 ;routine zum holen einer 16 bit zahl und auswertung
- 1978 ;
- 1979 get16 jsr$aefd;komma?
- 1981 jsr$ad8a;16 bit zahl holen
- 1983 jsr$b7f7;und umwandeln
- 1985 ldx$14;lo-byte
- 1987 ldy$15;hi-byte der zahl
- 1989 rts;ende der unterroutine
- 1990 ;
- 2000 cont jsr$ffd8;'save'
- 2010 rts;zurueck zu basic
- 2015 ;
- 2020 ;laden eines programms
- 2025 ;
- 2030 ld ldx#08
- 2040 kk ldy#01
- 2050 jsr$ffba;file vorbereiten
- 2060 ldaz4
- 2070 ldxlo
- 2080 ldyhi
- 2090 jsr$ffbd;filenamen vorbereiten
- 2100 lda#00;load-flag auf 0
- 2101 sta$0a;und merken
- 2103 jmp$e16f;einsprung in die 'load'-routine
- 2200 ;
- 2340 ;routine prueft bit 6 des befehlbytes
- 2345 ;und schaltet bei 1 die rote led am
- 2346 ;laufwerk an.
- 2348 ;
- 2350 led lda#64
- 2360 andz1;test auf bit 6
- 2380 beqende;bei 0 'rts'
- 2390 ldx#08
- 2400 jsr$ffc9;cmd out aktivieren
- 2410 ldx#00
- 2420 b3 ldat3,x
- 2430 jsr$ffd2
- 2440 inx
- 2450 cpx#05;5 befehlbytes
- 2460 bneb3
- 2470 jsr$ffcc;cmd inaktivieren
- 2480 ende rts;ende des unterprogramms
- 2490 bit05 lda#32;testet bit 5 des befehlbytes
- 2500 andz1
- 2530 bneende;gesetzt,dann diskettenwechsel
- 2540 pla;nein,
- 2550 pla;dann stack "saeubern"
- 2560 jmpc;und weiter auf diskette warten
- 2570 ;
- 2575 ;tabelle von anweisungen und (aktuellen)
- 2576 ;zwischenspeichern
- 2580 ;
- 2610 t1 .tx"m-r";auslesen des diskkontrollers
- 2620 .by00,28,1 ;der floppy (wegen ls)
- 2630 t2 .tx"m-e";floppymotor
- 2640 .by71,198 ;einschalten und auf 'ready' testen
- 2644 t3 .tx"m-e";befehlssequenz fuer
- 2646 .by$18,$c1 ;led am laufwerk anschalten
- 2650 t4 .tx"m-r";schon 'ready' ?
- 2660 .by$ff,0,1
- 2670 z1 .by$00;platz fuer befehlsbyte
- 2680 z2 .by$10;16 fuer 'and' verknuepfung (ls)
- 2700 z4 .by$00;speicher fuer filenamenlaenge
- 2705 z5 .by$00;zaehler fuer warteschleife
- 2730 lo .by$00;zwischenspeicher fuer
- 2740 hi .by$00;filenamenadresse
-